package com.example.backblog.service.fileupload;

import cn.novelweb.tool.upload.local.pojo.UploadFileParam;
import com.example.backblog.dto.fileupload.AddFileDto;
import com.example.backblog.dto.fileupload.GetFileDto;
import com.example.backblog.entity.fileupload.Files;
import com.example.backblog.vo.ApiResult;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;

public interface FileService {
//    /**
//     * 小文件上传
//     *
//     * @param file 文件
//     */
//    ApiResult<String> uploadFiles(MultipartFile file);

    /**
     * 获取文件输入流
     *
     * @param id id
     * @return {@link InputStream}
     */
    InputStream getFileInputStream(Long id);

    /**
     * 获取指定文件详情
     *
     * @param id id
     */
    ApiResult<Files> getFileDetails(Long id);



    /**
     * 检查文件MD5
     *
     * @param md5      md5
     * @param fileName 文件名称
     * @param userId
     */
    ApiResult<Object> checkFileMd5(String md5, String fileName, Long parentId, Long userId);

    /**
     * 断点续传
     *
     * @param param    参数
     * @param parentId
     * @param request  请求
     * @param userId
     */
    ApiResult<Object> breakpointResumeUpload(UploadFileParam param, Long parentId, HttpServletRequest request, Long userId);

    /**
     * 添加文件
     *
     * @param dto    dto
     * @param userId
     */
    ApiResult<String> addFile(AddFileDto dto, Long userId);

    /**
     * 分页获取文件信息
     *
     * @param pageNo   当前页
     * @param pageSize 分页大小
     */
    ApiResult<List<GetFileDto>> getFileList(Integer pageNo, Integer pageSize) throws InstantiationException, IllegalAccessException;

    /**
     * 判断切片是否已经上传
     *
     * @param param
     * @param parentId
     * @param request
     * @param userId
     * @return
     */
    ApiResult<Object> checkFileChunk(UploadFileParam param, Long parentId, HttpServletRequest request, Long userId);

    /**
     * 删除文件
     * @param id
     */
    void deleteFile(Long id) throws Exception;

    void download(Long id, HttpServletResponse response) throws Exception;

    List<Files> findAll(Long parentId, Long userId);

    void viewMedia(Long id, HttpServletResponse response) throws Exception;

    Object findOne(Long id) throws Exception;
}
